//懒汉的方式实现单例模式
class SingletonLazy{
    //引用先初始化为null，而不是直接创建实例
    //加上volatile防止重排序
    private volatile static SingletonLazy instance = null;
    private static Object locker = new Object();
    public static SingletonLazy getInstance(){
        //判断是否是第一次实例，如果是第一次调用就需要加锁，如果不是第一次，那就意味着已经被实例过了，就不需要加锁，这样能提高代码的效率
        if (instance == null){
            //防止多线程导致多重实例化就需要给判断操作加锁
            synchronized (locker){
                if (instance == null){
                    instance = new SingletonLazy();
                }
            }
        }
        return instance;
    }
    private  SingletonLazy(){}
}
public class ThreadDemo22 {
    public static void main(String[] args) {
        SingletonLazy s = SingletonLazy.getInstance();
        SingletonLazy s1 = SingletonLazy.getInstance();
        System.out.println(s == s1);
    }
}
